package com.example.sprintboot.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.sprintboot.entity.Order;
import com.example.sprintboot.entity.OrderItem;
import com.example.sprintboot.entity.Payment;
import com.example.sprintboot.vo.OrderDetailVO;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface OrderService {
    // 创建订单（下单）
    Order createOrder(Integer userId, Integer addressId, List<OrderItem> items, String remark);

    // 查询用户所有订单
    List<Order> getOrdersByUserId(Integer userId);

    // 查询订单详情（含订单项）
    Order getOrderDetail(Integer orderId);

    // 支付订单（模拟支付）
    boolean payOrder(Integer userId, Integer orderId, String payMethod);

    // 取消订单
    boolean cancelOrder(Integer userId, Integer orderId);

    // 确认收货
    boolean confirmOrder(Integer userId, Integer orderId);

    // 申请退款
    boolean refundOrder(Integer userId, Integer orderId, String reason);

    // 查询支付记录
    Payment getPaymentByOrderId(Integer orderId);

    // 查询订单详情VO
    OrderDetailVO getOrderDetailVO(Integer orderId, Integer userId);

    // 删除订单
    boolean deleteOrder(Integer userId, Integer orderId);
    
    // 卖家相关方法
    List<Order> getOrdersBySellerId(Integer sellerId);
    int getOrderCountBySellerId(Integer sellerId);
    BigDecimal getTotalRevenueBySellerId(Integer sellerId);
    int getPendingOrderCountBySellerId(Integer sellerId);
    boolean shipOrder(Integer sellerId, Integer orderId);

    // 管理员端订单管理相关方法
    IPage<Order> adminListOrders(int page, int pageSize, String orderSn, String status, Integer userId, String startDate, String endDate);
    boolean cancelOrderByAdmin(Integer orderId);
    boolean refundOrderByAdmin(Integer orderId, String reason, String remark, Double amount);
    boolean deleteOrderByAdmin(Integer orderId);
    Map<String, Object> getAdminOrderStats();
} 